// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported BaseIcon, IconGrid, IconGridLayout */
-const { Clutter, GLib, GObject, Meta, St } = imports.gi;
+const { Clutter, GLib, GObject, Meta, Shell, St } = imports.gi;
const Params = imports.misc.params;
const Main = imports.ui.main;
};
var BaseIcon = GObject.registerClass(
-class BaseIcon extends St.Bin {
+class BaseIcon extends Shell.SquareBin {
_init(label, params) {
params = Params.parse(params, {
createIcon: null,
this._iconThemeChangedId = cache.connect('icon-theme-changed', this._onIconThemeChanged.bind(this));
}
- vfunc_get_preferred_width(_forHeight) {
- // Return the actual height to keep the squared aspect
- return this.get_preferred_height(-1);
- }
-
// This can be overridden by a subclass, or by the createIcon
// parameter to _init()
createIcon(_size) {
'shell-mount-operation.h',
'shell-perf-log.h',
'shell-screenshot.h',
+ 'shell-square-bin.h',
'shell-stack.h',
'shell-tray-icon.h',
'shell-tray-manager.h',
'shell-screenshot.c',
'shell-secure-text-buffer.c',
'shell-secure-text-buffer.h',
+ 'shell-square-bin.c',
'shell-stack.c',
'shell-tray-icon.c',
'shell-tray-manager.c',
--- /dev/null
+#include "config.h"
+
+#include "shell-square-bin.h"
+
+struct _ShellSquareBin
+{
+ /*< private >*/
+ StBin parent_instance;
+};
+
+G_DEFINE_TYPE (ShellSquareBin, shell_square_bin, ST_TYPE_BIN);
+
+static void
+shell_square_bin_get_preferred_width (ClutterActor *actor,
+ float for_height,
+ float *min_width_p,
+ float *natural_width_p)
+{
+ float min_width, nat_width;
+
+ /* Return the actual height to keep the squared aspect */
+ clutter_actor_get_preferred_height (actor, -1,
+ &min_width, &nat_width);
+
+ if (min_width_p)
+ *min_width_p = min_width;
+
+ if (natural_width_p)
+ *natural_width_p = nat_width;
+}
+
+static void
+shell_square_bin_init (ShellSquareBin *self)
+{
+}
+
+static void
+shell_square_bin_class_init (ShellSquareBinClass *klass)
+{
+ ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
+
+ actor_class->get_preferred_width = shell_square_bin_get_preferred_width;
+}
--- /dev/null
+#ifndef __SHELL_SQUARE_BIN_H__
+#define __SHELL_SQUARE_BIN_H__
+
+#include <st/st.h>
+
+G_BEGIN_DECLS
+
+#define SHELL_TYPE_SQUARE_BIN (shell_square_bin_get_type ())
+G_DECLARE_FINAL_TYPE (ShellSquareBin, shell_square_bin, SHELL, SquareBin, StBin)
+
+G_END_DECLS
+
+#endif /* __SHELL_SQUARE_BIN_H__ */